Parsing 保留关键字与长标识符(多字)
我想创建一个具有友好函数名的MiniLangParsing 保留关键字与长标识符(多字),parsing,antlr4,lexer,Parsing,Antlr4,Lexer,我想创建一个具有友好函数名的MiniLang 这是我的示例脚本和预期语句 我想一些保留的关键字将在ID(多字标识符)之前匹配。但是ANTLR4只匹配ID。我尝试在ID之前定义关键字,但不影响效果 如何为ID之前要匹配的语句的关键字定义规则 谢谢 这是我的语法 grammar MiniLang; document : (stmt NL*)+ EOF ; stmt : Set Space+ IDs Space* '=' S
这是我的示例脚本和预期语句
我想一些保留的关键字将在ID(多字标识符)之前匹配。但是ANTLR4只匹配ID。我尝试在ID之前定义关键字,但不影响效果 如何为ID之前要匹配的语句的关键字定义规则 谢谢 这是我的语法
grammar MiniLang;
document
: (stmt NL*)+ EOF
;
stmt
: Set Space+ IDs Space* '=' Space* expr Space* ';' # SetStatement
| IDs Space* '(' Space* (expr (Space*(',' expr))*)? Space* ')' Space* ';' # FunctionCall
;
expr
: atom
;
atom
: IDs
| Number
| String
;
Set
: 'set'
;
Space
: ' '
;
Number
: [0-9]+
;
ID
: [a-zA-Z][a-zA-Z0-9]*
;
IDs
: ID (Space ID)*
;
String
: ['] (~['\r\n\\] | EscapeSequence)* [']
;
EscapeSequence
: '\\' [']
;
NL
: [\r\n]
;
lexer尽可能多地匹配。因此,您需要将
IDs
规则改为解析器规则:
ids
: ID+
;
Space
: [ \t] -> skip
;
或者,如果要保留空格:
ids
: ID (Space ID)*
;
非常感谢你!我更清楚地理解lexer和parser。
ids
: ID (Space ID)*
;