首页 > 解决方案 > 这个流氓语法有什么问题?

问题描述

所以我试图让这个语法起作用,但是它给了我一个错误。它来自 Number 词法中的 @context="num"。它告诉我它是模棱两可的,谁能告诉我为什么?

start syntax Statement = Type Id "=" Number ";" ;   

lexical Id = @context="id" [a-z] !<< [a-z]+ !>> [a-z] \ Type;

lexical Number = @context="num" [0-9]+;

keyword Type = @context="type" ("int"|"str"|"float");

这真的很奇怪,因为它在没有@context 标签的情况下工作,但是当我添加它时,我突然无法在不同的模块中导入/查找符号语句。或者是给我语法不明确的错误。

请帮忙

**编辑:**如果我将关键字 Type 更改为普通的词法类型,那么无论有没有括号,问题仍然存在。

标签: context-free-grammarrascal

解决方案


我认为您不应该使用关键字词法进行解析,因为它往往是很多东西的组合。

并且,关键字必须是带有普通文字的普通列表操作产品。它不适用于任意正则表达式。

所以它在没有上下文的情况下工作的原因,我猜是因为你还删除了括号,这将它变成了一个通用的替代列表?


推荐阅读