通常,当我将语法导出或grun到目标语言时,它会给我两个.tokens文件。例如,在以下方面:
lexer grammar TestLexer;
NUM : [0-9]+;
OTHER : ABC;
fragment NEWER : [xyz]+;
ABC : [abc]+;我为每个非片段获得一个令牌,并得到两个相同的文件:
# Parser.tokens
NUM=1
OTHER=2
ABC=3# Lexer.tokens
NUM=1
OTHER=2
ABC=3这些文件总是一样的吗?我尝试在parser中定义一个令牌,但是由于我已经将它定义为parser grammar,所以我假设这两个文件总是相同的,对吗?
发布于 2022-08-11 04:50:55
语法总是作为单独的词法和解析器语法处理。如果使用组合语法,则暂时分成两种语法,并单独处理。每个处理步骤都生成一个令牌文件(已找到的lexer令牌列表)。令牌文件是词汇者和解析器之间的链接。当您实际设置tokenVocab值时,将使用令牌文件。这也意味着,如果您有一个令牌文件,则不需要一个lexer语法。
我不确定parser.tokens文件。它可能对语法导入有用。
然后,您也可以为lexer语法指定一个tocenVocab,它允许您显式地将数字值赋值给令牌,如果您必须在平台代码中检查令牌范围(例如所有关键字),它就会派上用场。我目前无法检查这一点,但使用此功能可能会导致具有不同内容的令牌文件。
https://stackoverflow.com/questions/73313013
复制相似问题