[英]Happy Parse Error
我目前正在使用alex和高興的lexer / parser生成器來實現以太坊智能合約語言的穩定性的解析器。 目前,我正在使用簡化的語法以簡化初始開發。
我在解析我的測試合同文件的“合同”部分時遇到錯誤。
以下是語法代碼:
ProgSource :: { ProgSource }
ProgSource : SourceUnit { ProgSource $1 }
SourceUnit : PragmaDirective { SourceUnit $1}
PragmaDirective : "pragma" ident ";" {Pragma $2 }
| {- empty -} { [] }
ImportDirective :
"import" stringLiteral ";" { ImportDir $2 }
ContractDefinition : contract ident "{" ContractPart "}" { Contract $2 $3 }
ContractPart : StateVarDecl { ContractPart $1 }
StateVarDecl : TypeName "public" ident ";" { StateVar $1 $3 }
| TypeName "public" ident "=" Expression ";" { StateV $1 $3 $5 }
以下文件是我的測試“合同”:
pragma solidity;
contract identifier12 {
public variable = 1;
}
結果是將測試合同傳遞到解析器的主要功能中。
$ cat test.txt | ./main
main: Parse error at TContract (AlexPn 17 2 1)2:1
CallStack (from HasCallStack):
error, called at ./Parser.hs:232:3 in main:Parser
從錯誤中可以看出,該問題是“合同”令牌的第一個字母,位於第2行第1列。但是據我理解,這應該正確解析嗎?
您將ProgSource
定義為單個 SourceUnit
,因此在遇到第二個解析器時解析器將失敗。 我想您希望它成為SourceUnit
的列表。
這同樣適用於ContractPart
。
另外,您不是要在ContractDefinition
引用"contract"
嗎? 在同一生產中, $3
應該是$4
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.