无法在lark parser python中同时分析多个语句
因此,我正在用lark编写一种编程语言,并试图找出如何解析多行代码。每当我解析时都会出现以下错误无法在lark parser python中同时分析多个语句,python,python-3.x,Python,Python 3.x,因此,我正在用lark编写一种编程语言,并试图找出如何解析多行代码。每当我解析时都会出现以下错误 print("HI"); print("HI"); 错误: PS E:\ParserAndLexer>&C:/Python38/python.exe E:/ParserAndLexer/lite/main.py 回溯(最近一次呼叫最后一次): 文件“C:\Python38\lib\site packages\lark\lexer.py”,第416行,在lex
print("HI");
print("HI");
错误:
PS E:\ParserAndLexer>&C:/Python38/python.exe E:/ParserAndLexer/lite/main.py
回溯(最近一次呼叫最后一次):
文件“C:\Python38\lib\site packages\lark\lexer.py”,第416行,在lex中
对于l.lex中的x(stream、self.root\u lexer.newline\u类型、self.root\u lexer.ignore\u类型):
文件“C:\Python38\lib\site packages\lark\lexer.py”,第200行,在lex中
引发意外字符(流、行字符、行字符、行列、行字符、列、允许=允许、状态=自状态、令牌历史=最后一个令牌和[最后一个令牌])
lark.exceptions.unexpected字符:在第2行第1列没有为“p”定义终端
打印(“HI”);
^
应为:{'RBRACE'}
以前的标记:标记('分号',';')
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“e:/ParserAndLexer/lite/main.py”,第21行,在
打印(lite_解析器(lite_代码))
文件“C:\Python38\lib\site packages\lark\lark.py”,第464行,在parse中
返回self.parser.parse(text,start=start)
文件“C:\Python38\lib\site packages\lark\parser\u frontends.py”,第148行,在parse中
返回self.\u parse(令牌\u流、开始、设置\u解析器\u状态)
文件“C:\Python38\lib\site packages\lark\parser\u frontends.py”,第63行,in\u parse
返回self.parser.parse(输入,开始,*args)
文件“C:\Python38\lib\site packages\lark\parsers\lalr\u parser.py”,第35行,在parse中
返回self.parser.parse(*args)
文件“C:\Python38\lib\site packages\lark\parsers\lalr\u parser.py”,第86行,在parse中
对于流中的令牌:
文件“C:\Python38\lib\site packages\lark\indenter.py”,第32行,在进程中
对于流中的令牌:
文件“C:\Python38\lib\site packages\lark\lexer.py”,第431行,在lex中
未预料到的上升(t,e.允许,状态=e.状态)
lark.exceptions.UnexpectedToken:第2行第1列的意外标记('NAME','print')。
预期会出现以下情况之一:
*红细胞
这是我的.lark
文件:
?start: expr
| statement
| var
| bool
| condition
| if
| _NL* tree
?expr: STRING -> string
| NUMBER -> number
| NUMBER "+" NUMBER -> add
| NUMBER "-" NUMBER -> sub
| NUMBER "*" NUMBER -> mul
| NUMBER "/" NUMBER -> div
| STRING "+" STRING -> str_add
| NAME -> get_var
?bool: TRUE -> true
| FALSE -> false
?var: NAME "=" expr -> assign_var
?condition: expr "==" bool -> bool_comparison
| expr "==" expr -> expr_comparison
?statement: "print" "(" expr ")" ";" -> print_statement
| "input" "(" expr ")" ";" -> input_statement
?if : "if" condition "{" statement "}" -> if_statement
tree: _NL [_INDENT tree+ _DEDENT]
TRUE: "true"
FALSE: "false"
_NL: /(\r?\n[\t ]*)+/
%import common.ESCAPED_STRING -> STRING
%import common.NUMBER
%import common.CNAME -> NAME
%declare _INDENT _DEDENT
%import common.WS_INLINE
%ignore WS_INLINE
%ignore _NL
我忽略了换行标记,所以我不知道为什么会出现这个错误,我的完整代码在github上:非常感谢您的帮助,谢谢 您的语法如何允许一系列的
语句
?语法错误是第二个print语句的开头-您可能需要start
来匹配它当前匹配的一系列内容。就像测试makestart
matchstatement+
一样,这应该适用于这个简单的示例。等等,我在startYes语句中已经有了语句
。因此,解析器匹配第一次打印,然后在第二次打印开始时匹配之后的错误。如果你需要更多的帮助或者问将来的问题,你必须把问题中的代码改成a,这样任何人都可以完全运行你正在运行的代码,并看到相同的结果。