学校では、言語を設計してから実装するように割り当てられました (私はそれを実装するのがとても楽しいです =))。先生は yacc/lex を使うように言いましたが、私は Java + regex API を使うことにしました。私が設計した言語は次のようになります。
Program "my program"
var yourName = read()
if { equals("guy1" to yourName) }
print("hello my friend")
else
print("hello extranger")
end
Program End
ご覧のとおり、かなり基本的な言語です =)。
抽象クラスを作成してからなどのSentence
サブクラスを作成し、文の集まりだけのクラスを作成するなど、非常に OOP の方法で実装できると思いました。次に、すべての s で抽象メソッドを呼び出すため、言語に準拠するための最初のアプローチは 2 つのフェーズのみで構成されていました。VariableAssignment
IfSentence
Program
eval
Sentence
- 検索行の構文を特定する
- 各行に対応するクラスを作成する
もちろん、フェーズ Ii で何か問題が発生した場合、エラーが発生する可能性があります。
私の質問は、私はそれを間違っていますか?理論が言うように、すべての段階 (字句、構文、意味) を検討する必要がありますか? 単純な 2 フェーズ コンパイラを続行する必要がありますか?