繁体   English   中英

如何排除部分输入被解析?

[英]How to exclude parts of input from being parsed?

好的,因此我已经建立了完整的Bison语法(及其Lex对应语言),这就是我需要的:

我有什么方法可以设置语法规则,以便将输入的特定部分排除在分析范围之外 ,而按原样检索?

例如

external_code : EXT_CODE_START '{' '}';

例如,如何将大括号之间的部分作为字符串获取 ,而又不让解析器使用它(因为它将是“外部”代码,因此它不会遵守我当前的语言规则...因此,没关系-文字很好)。

你会怎么做?

我是否应该通过向Lexer添加令牌来解决此问题? (例如,与我对字符串文字所做的一样?)

任何想法都欢迎! (希望您已经了解了我的需求...)


PS好吧,我也想过要像对待C样式多行注释一样处理整个情况(=在Lexer中开始注释时捕获,然后-在自定义函数中,一直进行到结束。 -评论)。 那肯定是某种解决方案。 但是没有什么...容易吗?

您可以调用词法分析器的input / yyinput函数从输入流中读取字符并对其进行处理(并且不会对它们进行标记,因此解析器将永远看不到它们)。

您可以使用词法分析器状态,将词法分析器置于不同的状态,它将跳过被排除的文本,而不是将其作为标记返回。

解析器动作中的上述任何一个问题都在于处理解析器的一个令牌超前,这在某些(但不是全部)情况下会发生。 例如,以下可能会起作用:

external_code: EXT_CODE_START '{' { skip_external_code(); } '}'

因为该操作将处于默认的还原状态且不会提前。 在这种情况下, skip_external_code可以只是设置词法分析器状态(上面的第二个选项),也可以调用input直到到达匹配的} ,然后调用unput一次(上面的第一个选项)。

请注意, skip_external_code函数需要在词法分析器文件的第3部分中定义,以便它可以访问词法分析器中的静态函数和宏(这两种技术都依赖于此)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM