2012-02-26 3 views
0

カスタム言語インタープリタとして構文解析し、それは私が期待するべきである入力です。だから私C++、私はそれを私はそれがコマンド(ラインごと)だと解釈すべきであるカスタム言語として入力されたテキストファイルを解析して実行する必要が

#Some variables 
myInt = 2 
myFloat = 2.5 
myString = “Hello” 

#Lists 
myList = (myInt, myFloat, myInt + myFloat) 
myOtherList = (myFloat + myFloat, myInt+ myInt) 
subList = myList[:1] 
completeList = myList + myOtherList + subList 

#This should have no effect (it is ok if it is being calculated) 
2+4 

#Now some printing 
print(myString) 
print(“World”) 
print(completeList) 
print(completeList[3]) 

#Some syntax errors 
b = “hello, this string is not enclosed right 
c = myString + completeList 
d = myInt + SOME_VARIABLE_I_HAVENT_DEFINED_YET 

#First string to appear makes everything a string 
print(1 + 2 + 15.5 + 2.2 + “Hi” + 3 + 4 + 6) 
print(1 + 2 + 15.5 + 2.2 + 3 + 4 + 6 + “hi”) 
print((1,2)) 

すでに最初のチェック機能を持っていますが、今は印刷/割り当て/コメント/不正な構文コマンドなどのときに分かります。私は今、print関数とassignコマンドの中で何を解析すべきか、空白を無視すべきであるとか、それは数え切れない区切り文字ではないかもしれない。

私はちょっとガイドしてください。どのような文字列関数を使用しなければならないのですか?それを動作させるにはどうすればトークンに切り捨てることができますか?私はそれがリストの型と引用符のかっこに従うために、いくつかのスタックを使用する必要がありますね?このコードの出力です

PS

:任意の一般的な、より詳細な情報は、おかげで(理解されるであろう、私はすでに私は必要なもののために、すべてのオーバーロード演算子を持っている

Hello 
World 
(2, 2.5, 4.5, 5.0, 4, 2, 2.5) 
5.0 
InvalidSyntax : b = “hello, this string is not enclosed right 
InvalidSyntax : c = myString + completeList 
UndefinedVariableName : SOME_VARIABLE_I_HAVENT_DEFINED_YET 
20.7Hi346 
33.7hi 
(1,2) 

を、私だけ右のそれを解析し、私すでに組み込まれている関数にそれを送信する必要が

+0

あなたの文章を大文字にするのはあまりにも大変でしたか? –

+0

はい、文法を発明している人は、適切な大文字を使用する必要があります。また、例に中括弧 '' 'と' ''を貼り付けたことに注意してください。これはおそらくプログラミング言語の意図ではありません。また、この例では、キッチンの機能を備えた汎用言語のように見えます。単純に始めましょう。たとえば算術式を最初に実行してから、単純な割り当てで名前付き変数を追加します。言語が解決しなければならない問題をスコープしないで、これは本当の質問ではありません。 – Potatoswatter

+0

私は文章を大文字にしました。引用符のことについては、それは私が文字列型に期待するべきものです。 –

答えて

2

素晴らしいC++ライブラリはそのために存在します。SPIRIT

+1

素晴らしい(コンパイルエラーが恐ろしい)についてはあまりよく分かりませんが、確かに効率的です。 –

+1

多くのブーストサブライブラリのように、私はエラーが発生したファイル内の行であるコンパイルエラーメッセージで理解できると思うだけです:) –

+0

私は自分自身で解析する必要があります。私のニーズにはあまりにも複雑に見える、ありがとう。 –

2

あなたは読む機会がありませんでしたthe Dragon Book ...

自分の言語を発明する代わりに、LuaまたはPythonインタープリタをあなたの製品に埋め込む方法についてどう思いますか?より一般的で本格的なプログラミング言語です。あなたが正常に解析した後も:自分自身の言語を発明するという欠点があることである

:さらにグーグルのような、あなたがそれらを埋め込む方法についてのチュートリアルをたくさん見つけましょう自分の言語では、セマンティクスを定義する必要があります。構文解析は、の構文を処理するだけです。これはセマンティクスとは異なります。あなたの状況はわかりませんが、どちらも通常、単一のソフトウェアプロジェクトだけを学ぶのに時間がかかります。ブーストスピリットについては

:(。しかし、最終的に実用的なソフトウェアデザインであるかについての自分の無知を示​​した)、私はそれを書くことによって彼らの粋を見せたかった人々によって書かれた、それを使用することをお勧めしません

+0

使用できません –

関連する問題