首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Parser.tokens与Lexer.tokens的差异?

Parser.tokens与Lexer.tokens的差异?
EN

Stack Overflow用户
提问于 2022-08-10 21:39:17
回答 1查看 62关注 0票数 0

通常,当我将语法导出或grun到目标语言时,它会给我两个.tokens文件。例如,在以下方面:

代码语言:javascript
复制
lexer grammar TestLexer;

NUM  : [0-9]+;
OTHER : ABC;
fragment NEWER : [xyz]+;
ABC : [abc]+;

我为每个非片段获得一个令牌,并得到两个相同的文件:

代码语言:javascript
复制
# Parser.tokens
NUM=1
OTHER=2
ABC=3
代码语言:javascript
复制
# Lexer.tokens
NUM=1
OTHER=2
ABC=3

这些文件总是一样的吗?我尝试在parser中定义一个令牌,但是由于我已经将它定义为parser grammar,所以我假设这两个文件总是相同的,对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-11 04:50:55

语法总是作为单独的词法和解析器语法处理。如果使用组合语法,则暂时分成两种语法,并单独处理。每个处理步骤都生成一个令牌文件(已找到的lexer令牌列表)。令牌文件是词汇者和解析器之间的链接。当您实际设置tokenVocab值时,将使用令牌文件。这也意味着,如果您有一个令牌文件,则不需要一个lexer语法。

我不确定parser.tokens文件。它可能对语法导入有用。

然后,您也可以为lexer语法指定一个tocenVocab,它允许您显式地将数字值赋值给令牌,如果您必须在平台代码中检查令牌范围(例如所有关键字),它就会派上用场。我目前无法检查这一点,但使用此功能可能会导致具有不同内容的令牌文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73313013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档