[Feature] 写完了 打死不改了

This commit is contained in:
lichx
2024-12-24 16:17:20 +08:00
parent 3b735a43b8
commit e92384f424
10 changed files with 1308 additions and 48 deletions
+12 -9
View File
@@ -1,9 +1,12 @@
int i=0,t,b=15;
if(i>=10)
if(k==9)
h = 6;
else
{
c=10;
if(k<=95 && )
}
{
int a =1*9+2;
if(a>9){
a=a+1;
if(9>1){
a=10;
}
a=2+2;
}
}
+20 -6
View File
@@ -3,17 +3,25 @@
}
StatementList {
Statement*
LBrace Statement* RBrace
}
@skip { Whitespace }
IfStatement {
If LParen ConditionalExpression RParen PartIfStatement Else Statement | If LParen ConditionalExpression RParen Statement
If ConditionPart PartIfStatement Else Statement | If ConditionPart Statement
}
PartIfStatement {
If LParen ConditionalExpression RParen PartIfStatement Else PartIfStatement | NoIfStatement
If ConditionPart PartIfStatement Else PartIfStatement | NoIfStatement
}
ConditionPart {
LParen Condition RParen
}
Condition {
ConditionalExpression (LogicalOperator ConditionalExpression)*
}
ConditionalExpression {
@@ -45,7 +53,7 @@ ConstantDefinition {
}
VariableDefinition {
Type (Identifier | AssignmentStatement)+ (Comma Identifier | Comma AssignmentStatement)*
Type (Identifier | AssignmentStatement) (Comma Identifier | Comma AssignmentStatement)*
}
Type {
@@ -69,7 +77,11 @@ Number {
}
Operator {
EuqalTo | NotEqualTo | LessThan | GreaterThan | LessThanOrEqual | GreaterThanOrEqual
EqualTo | NotEqualTo | LessThan | GreaterThan | LessThanOrEqual | GreaterThanOrEqual
}
LogicalOperator {
And | Or
}
@tokens {
@@ -93,7 +105,7 @@ Operator {
UnsignedNumber { $[0-9]+ }
String { "\"" $[\x00-\x7F]* "\"" }
Character { "'" $[\x00-\x7F] "'" }
EuqalTo { "==" }
EqualTo { "==" }
NotEqualTo { "!=" }
LessThan { "<" }
GreaterThan { ">" }
@@ -101,4 +113,6 @@ Operator {
GreaterThanOrEqual { ">=" }
Equal { "=" }
Whitespace { $[\t\n\r]+ }
And { "&&" }
Or { "||" }
}
+88
View File
@@ -0,0 +1,88 @@
文法:
key: Program
0 Program ::= . StatementList
key: StatementList
1 StatementList ::= . LBrace Statement_0 RBrace
key: IfStatement
2 IfStatement ::= . If ConditionPart PartIfStatement Else Statement
3 IfStatement ::= . If ConditionPart Statement
key: PartIfStatement
4 PartIfStatement ::= . If ConditionPart PartIfStatement Else PartIfStatement
5 PartIfStatement ::= . NoIfStatement
key: ConditionPart
6 ConditionPart ::= . LParen Condition RParen
key: Condition
7 Condition ::= . ConditionalExpression LogicalOperator_ConditionalExpression_0
key: ConditionalExpression
8 ConditionalExpression ::= . Expression Operator Expression
9 ConditionalExpression ::= . Expression
key: Expression
10 Expression ::= . Term AddLike_Term_0
key: Statement
11 Statement ::= . IfStatement
12 Statement ::= . NoIfStatement
key: NoIfStatement
13 NoIfStatement ::= . AssignmentStatement Semicolon
14 NoIfStatement ::= . VariableDefinition Semicolon
15 NoIfStatement ::= . LBrace Statement_1 RBrace
16 NoIfStatement ::= . ConstantDefinition Semicolon
17 NoIfStatement ::= . Semicolon
key: AssignmentStatement
18 AssignmentStatement ::= . Identifier Equal Expression
key: Term
19 Term ::= . Factor MultiplyLike_Factor_0
key: ConstantDefinition
20 ConstantDefinition ::= . Const VariableDefinition
key: VariableDefinition
21 VariableDefinition ::= . Type Identifier__AssignmentStatement_0 Comma_Identifier__Comma_AssignmentStatement_0
key: Type
22 Type ::= . Int
23 Type ::= . Char
key: Factor
24 Factor ::= . Identifier
25 Factor ::= . Number
26 Factor ::= . Character
27 Factor ::= . LParen Expression RParen
key: AddLike
28 AddLike ::= . Plus
29 AddLike ::= . Minus
key: MultiplyLike
30 MultiplyLike ::= . Multiply
31 MultiplyLike ::= . Divide
32 MultiplyLike ::= . Modulo
key: Number
33 Number ::= . UnsignedNumber
34 Number ::= . Minus UnsignedNumber
35 Number ::= . Plus UnsignedNumber
key: Operator
36 Operator ::= . EqualTo
37 Operator ::= . NotEqualTo
38 Operator ::= . LessThan
39 Operator ::= . GreaterThan
40 Operator ::= . LessThanOrEqual
41 Operator ::= . GreaterThanOrEqual
key: LogicalOperator
42 LogicalOperator ::= . And
43 LogicalOperator ::= . Or
key: Statement_0
44 Statement_0 ::= .
45 Statement_0 ::= . Statement Statement_0
key: LogicalOperator_ConditionalExpression_0
46 LogicalOperator_ConditionalExpression_0 ::= .
47 LogicalOperator_ConditionalExpression_0 ::= . LogicalOperator ConditionalExpression LogicalOperator_ConditionalExpression_0
key: AddLike_Term_0
48 AddLike_Term_0 ::= .
49 AddLike_Term_0 ::= . AddLike Term AddLike_Term_0
key: Statement_1
50 Statement_1 ::= .
51 Statement_1 ::= . Statement Statement_1
key: MultiplyLike_Factor_0
52 MultiplyLike_Factor_0 ::= .
53 MultiplyLike_Factor_0 ::= . MultiplyLike Factor MultiplyLike_Factor_0
key: Identifier__AssignmentStatement_0
54 Identifier__AssignmentStatement_0 ::= . Identifier
55 Identifier__AssignmentStatement_0 ::= . AssignmentStatement
key: Comma_Identifier__Comma_AssignmentStatement_0
56 Comma_Identifier__Comma_AssignmentStatement_0 ::= .
57 Comma_Identifier__Comma_AssignmentStatement_0 ::= . Comma Identifier Comma_Identifier__Comma_AssignmentStatement_0
58 Comma_Identifier__Comma_AssignmentStatement_0 ::= . Comma AssignmentStatement Comma_Identifier__Comma_AssignmentStatement_0
+90
View File
@@ -0,0 +1,90 @@
文法:
key: Program
0 Program ::= . StatementList
key: StatementList
1 StatementList ::= . LBrace Statement_0 RBrace
key: IfStatement
2 IfStatement ::= . If ConditionPart PartIfStatement Else Statement
3 IfStatement ::= . If ConditionPart Statement
key: PartIfStatement
4 PartIfStatement ::= . If ConditionPart PartIfStatement Else PartIfStatement
5 PartIfStatement ::= . NoIfStatement
key: ConditionPart
6 ConditionPart ::= . LParen Condition RParen
key: Condition
7 Condition ::= . ConditionalExpression LogicalOperator_ConditionalExpression_0
key: ConditionalExpression
8 ConditionalExpression ::= . Expression Operator Expression
9 ConditionalExpression ::= . Expression
key: Expression
10 Expression ::= . Term AddLike_Term_0
key: Statement
11 Statement ::= . IfStatement
12 Statement ::= . NoIfStatement
key: NoIfStatement
13 NoIfStatement ::= . AssignmentStatement Semicolon
14 NoIfStatement ::= . VariableDefinition Semicolon
15 NoIfStatement ::= . LBrace Statement_1 RBrace
16 NoIfStatement ::= . ConstantDefinition Semicolon
17 NoIfStatement ::= . Semicolon
key: AssignmentStatement
18 AssignmentStatement ::= . Identifier Equal Expression
key: Term
19 Term ::= . Factor MultiplyLike_Factor_0
key: ConstantDefinition
20 ConstantDefinition ::= . Const VariableDefinition
key: VariableDefinition
21 VariableDefinition ::= . Type Identifier__AssignmentStatement_0 Comma_Identifier__Comma_AssignmentStatement_0
key: Type
22 Type ::= . Int
23 Type ::= . Char
key: Factor
24 Factor ::= . Identifier
25 Factor ::= . Number
26 Factor ::= . Character
27 Factor ::= . LParen Expression RParen
key: AddLike
28 AddLike ::= . Plus
29 AddLike ::= . Minus
key: MultiplyLike
30 MultiplyLike ::= . Multiply
31 MultiplyLike ::= . Divide
32 MultiplyLike ::= . Modulo
key: Number
33 Number ::= . UnsignedNumber
34 Number ::= . Minus UnsignedNumber
35 Number ::= . Plus UnsignedNumber
key: Operator
36 Operator ::= . EqualTo
37 Operator ::= . NotEqualTo
38 Operator ::= . LessThan
39 Operator ::= . GreaterThan
40 Operator ::= . LessThanOrEqual
41 Operator ::= . GreaterThanOrEqual
key: LogicalOperator
42 LogicalOperator ::= . And
43 LogicalOperator ::= . Or
key: Statement_0
44 Statement_0 ::= .
45 Statement_0 ::= . Statement Statement_0
key: LogicalOperator_ConditionalExpression_0
46 LogicalOperator_ConditionalExpression_0 ::= .
47 LogicalOperator_ConditionalExpression_0 ::= . LogicalOperator ConditionalExpression LogicalOperator_ConditionalExpression_0
key: AddLike_Term_0
48 AddLike_Term_0 ::= .
49 AddLike_Term_0 ::= . AddLike Term AddLike_Term_0
key: Statement_1
50 Statement_1 ::= .
51 Statement_1 ::= . Statement Statement_1
key: MultiplyLike_Factor_0
52 MultiplyLike_Factor_0 ::= .
53 MultiplyLike_Factor_0 ::= . MultiplyLike Factor MultiplyLike_Factor_0
key: Identifier__AssignmentStatement_0
54 Identifier__AssignmentStatement_0 ::= . Identifier
55 Identifier__AssignmentStatement_0 ::= . Identifier Identifier__AssignmentStatement_0
56 Identifier__AssignmentStatement_0 ::= . AssignmentStatement
57 Identifier__AssignmentStatement_0 ::= . AssignmentStatement Identifier__AssignmentStatement_0
key: Comma_Identifier__Comma_AssignmentStatement_0
58 Comma_Identifier__Comma_AssignmentStatement_0 ::= .
59 Comma_Identifier__Comma_AssignmentStatement_0 ::= . Comma Identifier Comma_Identifier__Comma_AssignmentStatement_0
60 Comma_Identifier__Comma_AssignmentStatement_0 ::= . Comma AssignmentStatement Comma_Identifier__Comma_AssignmentStatement_0