gpt4 book ai didi

java - 为什么这些终端符号不是独立的?

转载 作者:行者123 更新时间:2023-12-01 16:18:45 25 4
gpt4 key购买 nike

我稍微玩了一下 Xtext,发现 DSL 编辑器出现了意外的行为。这不是 Xtext 文件的全部,但对于这个问题来说很重要。

Title:   
title= NOUN VERB ':';
Use:
'um' NOUN use=Verbtype;

Verbtype: Simpleverb | NotSeperableVerb;

Simpleverb:
'zu' simpleverb=VERB;

NotSeperableVerb:
notseperable=NOTSEPERABLE;

terminal NOTSEPERABLE:
'be'VERB | 'emp'VERB |'ent'VERB | 'er'VERB | 'ge'VERB | 'miss'VERB | 'ver'VERB | 'zer' VERB;

terminal VERB: ('a'..'z')+;

如果我为标题部分写一个不可分离的动词,例如“beschreiben”,则它会带有红色下划线。我无法向我解释这一点。我想允许任何动词,因此任何开头小写的单词。

最佳答案

终端符号 NOTSEPERABLEVERB 不是独立的,因为它们重叠(即它们可以匹配一些相同的输入)。终端规则不互相影响的唯一方法是它们不重叠。

原因是词法分析器将输入转换为独立于解析器的标记流。解析器只是使用词法分析器生成的标记。它不会向词法分析器请求特定类型的标记,并且词法分析器不会根据解析器当前需要的类型生成不同的标记。相反,词法分析器根据以下逻辑生成标记:

从源代码中当前位置可以匹配的所有终端规则中,选择产生最长匹配的规则。如果存在相同的情况,请选择语法文件中第一个定义的那个。因此,给定输入 beschreibenVERBNOTSEPERABLE 都会产生相同长度的匹配,因此 NOTSEPERABLE 获胜因为它是首先定义的。

如果您想匹配其中一个,则需要定义一个可以匹配任一终端的非终端规则:

Verb: NOTSEPERABLE | VERB;

关于java - 为什么这些终端符号不是独立的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62329317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com