LEX?共享正则表达式

时间:2013-11-21 11:23:04

标签: regex yacc lex

我正在与LEX和YACC合作。我有一个关于如何定义标记的问题,我的意思是我有两个共享一些字符的正则表达式,请参阅下面的示例:

SHARED         "+"|"-"|"/"|"="|"%"|"?"|"!"|"."|"$"|"_"|"~"|"&"|"^"|"<"|">"|"("|")"|","
REXP_1          {SHARED}|[a-zA-Z]|[ \t]+|[\\][\\\"]
REXP_2          {SHARED}|[a-zA-Z]|[ \t]+|"*"

现在我的观点是当我在.lex文件的第三部分中定义标记时,如何识别共享正则表达式中的字符何时对应于REXP_1或REXP_2。

我认为我误解了一些东西,我想我写正则表达式的方式是错误的,但我找不到一种方法来更好地表达它。你能给我一些提示吗?

如果有人可以建议我确定何时定义令牌(file.lex)或何时在语法中定义符号(file.y),我会很感激。对于某些符号,很容易弄清楚它是一个标记还是一个语法符号,但对于其他一些符号,我发现很难定义放置它们的位置。

顺便说一句,我正在使用this grammar

1 个答案:

答案 0 :(得分:1)

Answered in a question edit

OP写道:

  

万一有人觉得有趣,我会写出我学到的课程。我认为我学到的最重要的一课是,常识是一个很好的工具,可以找出.lex文件中的实习代码是什么,以及与.y文件共享的合适代币。

     

由于术语常识&#39;可能有点模糊我发布以下示例:

  ALPHA_NUMERIC   [a-bA-B0-9]
  SQ_CHAR         {SHARED}|{ALPHA_NUMERIC}
  SINGLE_QUOTED   {SINGLE_QUOTE}{SQ_CHAR}{SQ_CHAR}*{SINGLE_QUOTE}
     

其中ALPHA_NUMERIC是一个好的实习生令牌(file.lex)但是在语法文件中共享的错误令牌,而SINGLE_QUOTED可能是与语法共享的好令牌({ {1}})。我写的可能是&#39;因为它非常依赖于我们正在处理的特定语法,在我的具体情况下,与YACC文件共享是一个很好的标记。

     

我所做的是将一个正则表达式定义为类似于@OGHaza在file.y中建议我的正则表达式,然后我在语法本身(file.lex)中使用它。

相关问题