【发布时间】:2015-04-20 05:28:03
【问题描述】:
我正在尝试用 Python 为 Java 编写一个基本的词法分析器。我现在面临的问题是将一行字符串拆分为单词/标记。
示例:
if (x < 3)
{
x = 3;
}
else
{
x = 0;
}
我希望它返回这样的列表:
["if", "(", "x", "<", "3", ")", ...
但我的代码正在返回
["if", "(x", "<", "3)"]
我的代码:
for line in code.readlines():
for word in line.split():
print word
我搜索了一个解决方案,但只找到了使用正则表达式的解决方案,有没有办法在没有正则表达式的情况下做到这一点?因为我不知道如何使用它们,而且我现在没有足够的时间来学习它......
任何帮助将不胜感激...
【问题讨论】:
-
是的,但那是 Java 代码,Java 允许这样做:
if (x>3){} -
至少,您需要为您的语言提供一组有效的句法标记并与之匹配。否则,您将无法使用这种方法。
-
看看shlex 模块。
-
@Shashank 我有一个完整的有效语法标记列表我只是在这里遇到问题,如果我能够按照我的意愿分割行,那么我将能够检查每个单词/标记针对我定义的一组标记。上面的代码只是我代码的一小部分……
-
仅使用 Python 正则表达式来对 Java 语法中的文本进行 lex 几乎是不可能的。
pyparsing库之类的东西可能是您需要的。