我使用COCOR以產生一個Java類掃描器/解析器代碼塊:
我有在創建EBNF表達一些麻煩匹配一個碼塊:解析與EBNF表達
我假設碼塊由兩個公知的標記所包圍: < &和&> 例如:
public method(int a, int b) <&
various code
&>
如果我定義的非終結符號
codeblock = "<&" {ANY} "&>"
如果兩個符號中的代碼包含'<'字符,則生成的編譯器將無法處理它,從而導致語法錯誤。
任何提示?
編輯:
COMPILER JavaLike
CHARACTERS
nonZeroDigit = "123456789".
digit = '0' + nonZeroDigit .
letter = 'A' .. 'Z' + 'a' .. 'z' + '_' + '$'.
TOKENS
ident = letter { letter | digit }.
PRODUCTIONS
JavaLike = {ClassDeclaration}.
ClassDeclaration ="class" ident ["extends" ident] "{" {VarDeclaration} {MethodDeclaration }"}" .
MethodDeclaration ="public" Type ident "("ParamList")" CodeBlock.
Codeblock = "<&" {ANY} "&>".
我已經省略了簡單起見一些生產。
這是我實際執行的語法。主要的錯誤是,如果塊中的代碼包含符號'>'或'&'中的一個,它將失敗。
如何定義ANY_WITHIN_BLOCK? – nick2k3 2010-09-09 14:31:15
你如何定義任何? – 2010-09-09 14:31:31
ANY是CocoR中的「快活」標記:它匹配每個標記。 – nick2k3 2010-09-09 14:34:11