首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带空字符串的ocamlyacc

带空字符串的ocamlyacc
EN

Stack Overflow用户
提问于 2016-02-23 05:28:11
回答 1查看 512关注 0票数 0

所以我有一个语法,其中包含空字符串。语法是这样的:

S->ε

S->表达式;;S

当我运行我的解析器时,我会得到错误“不要放弃更多的状态”,所以我相信我没有正确地表示空字符串。那么,我将如何表示它,特别是在lexer .mll文件中呢?

我知道我需要为它制定一个规则,所以我想我已经把它写下来了。这就是我认为解析器.mly文件应该看起来的样子,不包括用于表达式的内容。

代码语言:javascript
复制
s:
| EMPTY_STRING            { [] }
| expression SEMICOLON s  { $1::$3 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-23 07:02:53

你认为epsilon是一种象征,但它不是一种象征。这是一个长度为0的记号序列。因为那里没有标记,所以你的扫描器不需要知道。只是解析器需要了解它。

这里有一个语法,和我认为你想要的一样:

代码语言:javascript
复制
%token X
%token SEMICOLON
%token EOF
%start main
%type <char list> main
%%
main :
  s EOF           { $1 }

s :
  | epsilon         { $1 }
  | X SEMICOLON s { 'x' :: $3 }

epsilon :
                  { [] }

请注意,epsilon是一个非终端(不是令牌)。它的定义是一个空的符号序列。

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

https://stackoverflow.com/questions/35569540

复制
相关文章

相似问题

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