我想创建一个词法分析器的compiler.But我用正则表达式找东西如关键字和实数的问题。例如一些定义: id [aA-zZ][aA-zZ-0-9_]*
keyword if|else|when|while
integer [0-9]+
real integer\.integer
..有一些问题,但分析器不能得到一个关键字,例如,如果我给单词“其他”,它将它看作一个id(我得
我在java中编写词法分析器,需要在自定义数据类型列表(我的标记)中轻松向后或向前看。我已经尝试将下一个和上一个项目保存为副本,但后来我发现我需要远远地前进或后退。然后我尝试使用一个索引,但是调试起来并不令人不快,因为我不得不考虑减少,增加和获取当前位置(我甚至让对象存储了它们所在的位置),所有的同时保持在列表的范围内,所以这是一个丑陋的,很难阅读意大利面代码的混乱。 然后我看着linked li
import语句或tokenVocab选项可以放在解析器语法中以重用词法分析器语法。 Sam Harwell建议始终使用tokenVocab而不是import [1]。 import和tokenVocab之间有什么区别吗?如果没有区别(Sam说使用tokenVocab),那么为什么要有import声明? [1] I actually recommend avoiding the import st
我在编译器设计过程中读到扫描的输出是一对序列(符号表中的符号代码,符号位置)。我对“职位”部分的含义有点困惑。 当符号表被表示为可以使用索引(例如数组)来访问元素的结构时,“位置”是清楚的,这意味着数组中的第1个,第2个,第99个元素。 例如,对于源代码: if (a == b) a = a + c;
的扫描的输出将是流:(...,(ID,1),...,(ID,2),... ,(id,3))