Talk:Recursive descent parser generator: Difference between revisions
mNo edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
== Input specification == |
== Input specification == |
||
The main thing that needs to be fixed before adding any examples is the input specification. I want to make it detailed enough to be at least slightly usable (so more than just a recognizer) but I'm having trouble coming up with a clear way of expressing both the rule and the extra code generated when the rule is applied, especially taking in to account all the different languages that you might want to output with or to. Here's one attempt |
The main thing that needs to be fixed before adding any examples is the input specification. I want to make it detailed enough to be at least slightly usable (so more than just a recognizer) but I'm having trouble coming up with a clear way of expressing both the rule and the extra code generated when the rule is applied, especially taking in to account all the different languages that you might want to output with or to. Here's one attempt: |
||
<pre> |
<pre> |
||
header code to output |
|||
!! start |
|||
pre-traversal code here |
|||
⚫ | |||
post-traversal code here |
|||
!! expr |
!! start -> var expr |
||
more code |
|||
⚫ | |||
... |
... |
||
</pre> |
</pre> |
||
Is there any way to simplify this? (I |
Is there any way to simplify this? (I can't remember, can you do everything that needs to be done with a header and just post-traversal output?) |
||
The example I want to use is to take an arithmetic expression and turn it in to a series of single operations in the right order. So: |
The example I want to use is to take an arithmetic expression and turn it in to a series of single operations in the right order. So: |
||
Line 25: | Line 25: | ||
_d = _b + _c |
_d = _b + _c |
||
</pre> |
</pre> |
||
Oh yeah, if the task specification says to output the parser in your language of choice, the example will have to be rewritten for each language too, unless there's some way around that. |
|||
[[User:MagiMaster|MagiMaster]] ([[User talk:MagiMaster|talk]]) 06:10, 2 April 2014 (UTC) |
[[User:MagiMaster|MagiMaster]] ([[User talk:MagiMaster|talk]]) 06:10, 2 April 2014 (UTC) |
Revision as of 06:27, 2 April 2014
Input specification
The main thing that needs to be fixed before adding any examples is the input specification. I want to make it detailed enough to be at least slightly usable (so more than just a recognizer) but I'm having trouble coming up with a clear way of expressing both the rule and the extra code generated when the rule is applied, especially taking in to account all the different languages that you might want to output with or to. Here's one attempt:
header code to output !! start -> var expr more code !! expr -> '+' expr ...
Is there any way to simplify this? (I can't remember, can you do everything that needs to be done with a header and just post-traversal output?)
The example I want to use is to take an arithmetic expression and turn it in to a series of single operations in the right order. So:
(one + two) * three + four * five
Becomes something like:
_a = one + two _b = _a * three _c = four * five _d = _b + _c
Oh yeah, if the task specification says to output the parser in your language of choice, the example will have to be rewritten for each language too, unless there's some way around that.
MagiMaster (talk) 06:10, 2 April 2014 (UTC)