Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在lark parser python中同时分析多个语句_Python_Python 3.x - Fatal编程技术网

无法在lark parser python中同时分析多个语句

无法在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

因此,我正在用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中
对于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
来匹配它当前匹配的一系列内容。就像测试make
start
match
statement+
一样,这应该适用于这个简单的示例。等等,我在startYes语句中已经有了
语句
。因此,解析器匹配第一次打印,然后在第二次打印开始时匹配之后的错误。如果你需要更多的帮助或者问将来的问题,你必须把问题中的代码改成a,这样任何人都可以完全运行你正在运行的代码,并看到相同的结果。