【问题标题】:What's wrong with this Rascal grammar?这个流氓语法有什么问题?
【发布时间】:2018-05-04 18:27:48
【问题描述】:

所以我试图让这个语法工作,但是它给了我一个错误。它来自 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-grammar rascal


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的。类型定义中的括号是不允许的。检查器应该警告这种意外行为。我的错。
    • 好的,但是错误不是来自关键字。它来自数字词汇。以及上下文“num”。
    • 我说的是 id 中的 \ Type,并使用 type inside 语句。东西可以有交互,所以我先解决这个问题。
    猜你喜欢
    • 2016-09-06
    • 2012-07-07
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多