我正在构建一种小型编程语言,并使用 nearley.js 进行解析。我正在定义语法,并且语法语法工作正常,除了一种情况,即换行符。
这是语法:
statement -> var_assign {% id %}
| fun_call {% id %}
| function_def {% id %}
| conditional {% id %}
| loop {% id %}
statements
-> statement %NL
{%
(data) => {
return [data[0]];
}
%}
| statements %NL statement %NL
{%
(data) => {
return [...data[0], data[2]];
}
这是错误:
Error while parsing Error: invalid syntax at line 1 col 19:
1 @name = "mohammad"
^
2 call print(name)
Unexpected input (lexer error).
我没想到会有更多的意见。这是我的解析表的状态:
expression → %string ●
var_assign → %var_declaration %identifier _ "=" _ expression ●
statement → var_assign ●
我只在换行符的情况下遇到错误。其他一切都工作正常。
我刚刚发现错误不是由换行符引起的,而是解析器不知道语句何时结束,但仍然能够解决这个问题