📄 grm.err
字号:
Opening files...
Parsing specification from standard input...
Checking specification...
Warning: Terminal "COMM" was declared but never used
Warning: Non terminal "array" was declared but never used
Building parse tables...
Computing non-terminal nullability...
Computing first sets...
Building state machine...
Filling in tables...
*** Shift/Reduce conflict found in state #59
between type_declarations ::= type_declaration (*)
and type_declaration ::= (*) TYPE ID EQ type
under symbol TYPE
Resolved in favor of shifting.
*** Shift/Reduce conflict found in state #53
between function_declarations ::= function_declaration (*)
and function_declaration ::= (*) FUNCTION ID LPAREN type_fields RPAREN COLON ID EQ expression
and function_declaration ::= (*) FUNCTION ID LPAREN RPAREN COLON ID EQ expression
and function_declaration ::= (*) FUNCTION ID LPAREN type_fields RPAREN EQ expression
and function_declaration ::= (*) FUNCTION ID LPAREN RPAREN EQ expression
under symbol FUNCTION
Resolved in favor of shifting.
Checking for non-reduced productions...
*** Production "type_field ::= ID COLON ID " never reduced
Writing parser...
===== Terminals =====
[0]EOF [1]error [2]COMMA [3]COLON [4]SEMICOLON
[5]LPAREN [6]RPAREN [7]LBRACK [8]RBRACK [9]LBRACE
[10]RBRACE [11]DOT [12]PLUS [13]MINUS [14]TIMES
[15]DIVIDE [16]EQ [17]NEQ [18]LT [19]LE
[20]GT [21]GE [22]AND [23]OR [24]ASSIGN
[25]ARRAY [26]IF [27]THEN [28]ELSE [29]WHILE
[30]FOR [31]TO [32]DO [33]LET [34]IN
[35]END [36]OF [37]BREAK [38]NIL [39]FUNCTION
[40]VAR [41]TYPE [42]UMINUS [43]COMM [44]ID
[45]STRING [46]INT
===== Non terminals =====
[0]$START [1]program [2]expression [3]declaration_lists [4]declaration_list
[5]type_declaration [6]variable_declaration [7]function_declaration [8]type_declarations [9]function_declarations
[10]type [11]type_fields [12]type_field [13]expr_list [14]field_list
[15]expr_seq [16]lvalue [17]array
===== Productions =====
[0] $START ::= program EOF
[1] program ::= expression
[2] declaration_lists ::=
[3] declaration_lists ::= declaration_list declaration_lists
[4] declaration_list ::= type_declarations
[5] declaration_list ::= variable_declaration
[6] declaration_list ::= function_declarations
[7] type_declarations ::= type_declaration
[8] type_declarations ::= type_declaration type_declarations
[9] type_declaration ::= TYPE ID EQ type
[10] type ::= ID
[11] type ::= LBRACE type_fields RBRACE
[12] type ::= ARRAY OF ID
[13] type_fields ::= ID COLON ID
[14] type_fields ::= ID COLON ID COMMA type_fields
[15] type_field ::= ID COLON ID
[16] function_declarations ::= function_declaration
[17] function_declarations ::= function_declaration function_declarations
[18] function_declaration ::= FUNCTION ID LPAREN type_fields RPAREN EQ expression
[19] function_declaration ::= FUNCTION ID LPAREN type_fields RPAREN COLON ID EQ expression
[20] function_declaration ::= FUNCTION ID LPAREN RPAREN EQ expression
[21] function_declaration ::= FUNCTION ID LPAREN RPAREN COLON ID EQ expression
[22] variable_declaration ::= VAR ID ASSIGN expression
[23] variable_declaration ::= VAR ID COLON ID ASSIGN expression
[24] expression ::= STRING
[25] expression ::= INT
[26] expression ::= NIL
[27] expression ::= expression AND expression
[28] expression ::= expression OR expression
[29] expression ::= expression NEQ expression
[30] expression ::= expression EQ expression
[31] expression ::= expression GE expression
[32] expression ::= expression GT expression
[33] expression ::= expression LE expression
[34] expression ::= expression LT expression
[35] expression ::= expression MINUS expression
[36] expression ::= expression PLUS expression
[37] expression ::= expression TIMES expression
[38] expression ::= expression DIVIDE expression
[39] expression ::= MINUS expression
[40] expression ::= lvalue
[41] expression ::= lvalue ASSIGN expression
[42] expression ::= ID LPAREN expr_list RPAREN
[43] expression ::= ID LPAREN RPAREN
[44] expression ::= LPAREN expr_seq RPAREN
[45] expression ::= LPAREN RPAREN
[46] expression ::= ID LBRACE field_list RBRACE
[47] expression ::= ID LBRACE RBRACE
[48] expression ::= ID LBRACK expression RBRACK OF expression
[49] expression ::= WHILE expression DO expression
[50] expression ::= FOR ID ASSIGN expression TO expression DO expression
[51] expression ::= BREAK
[52] expression ::= LET declaration_lists IN expr_seq END
[53] expression ::= IF expression THEN expression
[54] expression ::= IF expression THEN expression ELSE expression
[55] expr_seq ::= expression
[56] expr_seq ::= expression SEMICOLON expr_seq
[57] expr_list ::= expression
[58] expr_list ::= expression COMMA expr_list
[59] field_list ::= ID EQ expression
[60] field_list ::= ID EQ expression COMMA field_list
[61] lvalue ::= ID
[62] lvalue ::= ID LBRACK expression RBRACK
[63] lvalue ::= lvalue DOT ID
[64] lvalue ::= lvalue LBRACK expression RBRACK
===== Viable Prefix Recognizer =====
START lalr_state [0]: { [expression ::= (*) FOR ID ASSIGN expression TO expression DO expression , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) lvalue ASSIGN expression , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) expression GT expression , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [lvalue ::= (*) lvalue LBRACK expression RBRACK , {EOF LBRACK DOT PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR ASSIGN }] [expression ::= (*) ID LBRACE field_list RBRACE , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) expression TIMES expression , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) expression OR expression , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [program ::= (*) expression , {EOF }] [expression ::= (*) BREAK , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) ID LPAREN expr_list RPAREN , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) expression LE expression , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) STRING , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) ID LBRACE RBRACE , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) expression DIVIDE expression , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) expression NEQ expression , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [lvalue ::= (*) ID , {EOF LBRACK DOT PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR ASSIGN }] [expression ::= (*) LET declaration_lists IN expr_seq END , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) ID LPAREN RPAREN , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) expression LT expression , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) INT , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) ID LBRACK expression RBRACK OF expression , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) MINUS expression , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) expression EQ expression , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [lvalue ::= (*) ID LBRACK expression RBRACK , {EOF LBRACK DOT PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR ASSIGN }] [expression ::= (*) IF expression THEN expression , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) LPAREN expr_seq RPAREN , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) expression MINUS expression , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) NIL , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) WHILE expression DO expression , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) lvalue , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [expression ::= (*) expression GE expression , {EOF PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR }] [lvalue ::= (*) lvalue DOT ID , {EOF LBRACK DOT PLUS MINUS TIMES DIVIDE EQ NEQ LT LE GT GE AND OR ASSIGN }]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -