如何组合来自不同词法分析器语法的 ANTLR 词法分析器规则?
How do I combine ANTLR lexer rules from different lexer grammars?
我正在玩 ANTLR 并构建像 jsx 这样的 DSL。
但是在 jsx 中,{} 中有 javasciprt 表达式,我如何在词法分析器语法中定义这些 ECMAScript 规则?我应该从头开始重写整个 ECMAScript 词法分析器,还是有一些方法可以在我的词法分析器语法中导入这些规则?
<div class={javasciprt expression in here}></div>
你可以使用 lexical modes:
lexer grammar YourCurrentLexer;
EXISTING_TOKEN
: '...'
;
// other tokens
ECMA_START
: '{' -> pushMode(ECMA_MODE)
;
mode ECMA_MODE;
ECMA_TOKEN
: '...'
;
// other ECMA tokens
// Support nested { ... }
OPEN_BRACE
: '{' -> pushMode(ECMA_MODE)
;
CLOSE_BRACE
: '}' -> popMode
;
Should I rewrite the whole ECMAScript lexer from scratch or there are some ways to import those rules in my lexer grammar?
您不能只在词法模式中导入现有语法。只需复制粘贴您想要的规则:https://github.com/antlr/grammars-v4/blob/master/javascript/ecmascript/JavaScript/ECMAScript.g4
我正在玩 ANTLR 并构建像 jsx 这样的 DSL。
但是在 jsx 中,{} 中有 javasciprt 表达式,我如何在词法分析器语法中定义这些 ECMAScript 规则?我应该从头开始重写整个 ECMAScript 词法分析器,还是有一些方法可以在我的词法分析器语法中导入这些规则?
<div class={javasciprt expression in here}></div>
你可以使用 lexical modes:
lexer grammar YourCurrentLexer;
EXISTING_TOKEN
: '...'
;
// other tokens
ECMA_START
: '{' -> pushMode(ECMA_MODE)
;
mode ECMA_MODE;
ECMA_TOKEN
: '...'
;
// other ECMA tokens
// Support nested { ... }
OPEN_BRACE
: '{' -> pushMode(ECMA_MODE)
;
CLOSE_BRACE
: '}' -> popMode
;
Should I rewrite the whole ECMAScript lexer from scratch or there are some ways to import those rules in my lexer grammar?
您不能只在词法模式中导入现有语法。只需复制粘贴您想要的规则:https://github.com/antlr/grammars-v4/blob/master/javascript/ecmascript/JavaScript/ECMAScript.g4