Я хотел бы создать MiniLang с дружественным именем функции
Это мой пример сценария и ожидается утверждение
Зарезервированные ключевые слова против длинного Identider (мульти-слов)
// actual // expected
set a = true; // 'set a' -> IDs // 'set' -> Set, 'a' -> IDS
Set name ('hello'); // 'Set name' -> IDs // 'Set name' -> IDs
set b = my friendly variable; // 'set b' -> IDs // 'set' -> Set, 'b' -> IDS
set my variable = 10; // 'set my variable' -> IDs // 'set' -> Set, 'my variable' -> IDs
Calculate sum (1, 2, 4); // 'Calculate sum' -> IDs // 'Calculate sum' -> IDs
Я хотел бы некоторые защищены ключевые слова будут сопоставлены перед идентификаторами (идентификатор с несколькими словами). Но ANTLR4 соответствует только идентификаторам. Я пытаюсь определить ключевые слова перед идентификаторами, но не влияю.
Как определить правило для ключевого слова заявления быть согласованы до того идентификаторами
Спасибо!
Это моя грамматика
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 vs parser. – hoangitk